home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / WFC010.ZIP / INCLUDE / SAMTF.H < prev    next >
C/C++ Source or Header  |  1995-12-07  |  25KB  |  410 lines

  1. /*
  2. ** Author: Samuel R. Blackburn
  3. ** CI$: 76300,326
  4. ** Internet: sammy@sed.csc.com
  5. **
  6. ** You can use it any way you like as long as you don't try to sell it.
  7. **
  8. ** Any attempt to sell WFC in source code form must have the permission
  9. ** of the original author. You can produce commercial executables with
  10. ** WFC but you can't sell WFC.
  11. **
  12. ** This header file came from MTF10.PS.
  13. **
  14. ** Copyright, 1995, Samuel R. Blackburn
  15. **
  16. ** $Workfile: $
  17. ** $Revision: $
  18. ** $Modtime: $
  19. */
  20.  
  21. #if ! defined( SAMS_MICROSOFT_TAPE_FORMAT_HEADER )
  22.  
  23. #define SAMS_MICROSOFT_TAPE_FORMAT_HEADER
  24.  
  25. #include <winnt.h>
  26.  
  27. /**  Name:          mtf.h
  28.      Description:   Structures and constants used in writing MTF and OTC.
  29.      Notes:         References are made throughout this header to a Logical
  30.                     Block Address (LBA).  The LBA of a given DBLK is its
  31.                     offset in Logical Blocks from the FIRST SSET of the set
  32.                     it is associated with.  The size of a Logical Block for
  33.                     a given tape is defined in the Tape Header.  The LBA is
  34.                     used along with the Physical Block Address (PBA) to
  35.                     calculate the physical location of a DBLK on tape.
  36.                     TAPE and EOTM DBLKs have no associated SSET, so the
  37.                     concept of an LBA is not defined for these blocks.
  38.                     The SSET DBLK itself is at LBA 0.  However, if a set
  39.                     crosses EOM and a continuation tape is written, the
  40.                     LBA in the continuation SSET will contain an adjusted
  41.                     logical offset, along with a PBA, to allow for the
  42.                     calculation of physical locations of DBLKs on the
  43.                     continuation tape.
  44. **/
  45. /* Defines for DBLK Common Block Attribute Bits
  46.    The lower 16 bits of the Common Block Attribute are reserved for general
  47.    attribute bits, (those which may appear in more than one type of DBLK), the upper
  48.    16 bits are reserved for attributes which are specific to one type of DBLK.
  49.    Note: the Common Block specific bit definitions overlap, and the block type is
  50.          used to determine the meaning of a given bit.
  51. */
  52. /* General: */
  53. #define MTF_DB_CONT_BIT              BIT0  /* Indicates continuation DBLK  */
  54. #define MTF_DB_ENCRYPT_BIT           BIT1  /* data is encrypted            */
  55. #define MTF_DB_COMPRESS_BIT          BIT2  /* Data is  software compressed */
  56. #define MTF_DB_EOS_AT_EOM_BIT        BIT3  /* End Of Media encountered during End Of Set processing */
  57. #define MTF_DB_VAR_BLKS_BIT          BIT4  /* DBLK data is variable length */
  58. #define MTF_DB_SESSION_BIT           BIT5  /* This set contains interleaved data streams(multiple sessions) */
  59. /* TAPE DBLK */
  60. #define MTF_DB_SM_EXISTS             BIT16  /* Tape contains OTC Set Map    */
  61. #define MTF_DB_FDD_ALLOWED           BIT17  /* Sets on tape may contain OTC File/Directory Detail */
  62. #define MTF_DB_SM_ALT_PART           BIT18  /* OTC Set Map is written on an alternate partition */
  63. #define MTF_DB_FDD_ALT_PART          BIT19  /* OTC File/Directory Data is written on an alternate partition */
  64. #define MTF_DB_EOM_BETWEEN_SETS_BIT  BIT20 /* End Of Media encountered after End Of Set processing */
  65. /* SSET DBLK */
  66. #define MTF_DB_FDD_EXISTS            BIT16  /* Set contains OTC F/DD        */
  67. /* ESET DBLK */
  68. #define MTF_DB_FDD_ABORTED_BIT       BIT16 /* OTC F/DD not written         */
  69. #define MTF_DB_END_OF_FAMILY_BIT     BIT17 /* Tape may not be appended to  */
  70. #define MTF_DB_ABORTED_SET_BIT       BIT18 /* Backup was aborted           */
  71. #define MTF_DB_SET_VERIFIED_BIT      BIT19 /* On DC2000 Devices, CRC/ECC verify was done */
  72. #define MTF_DB_SET_COMPARED_BIT      BIT17 /* This set was auto-verified after backup */
  73. /* EOTM DBLK */
  74. #define MTF_DB_NO_ESET_PBA           BIT16 /* Tape doesn't contain an ESET */
  75. #define MTF_DB_INVALID_ESET_PBA      BIT17 /* PBA not available on device  */
  76. /* Macro to make a DWORD representation of the 4 byte IDs */
  77. #define MTF_MARKER(a,b,c,d) (DWORD)((((DWORD)d)<<24)+\
  78. (((DWORD)c)<<16)+\
  79. (((DWORD)b)<<8)+\
  80. (DWORD)a))
  81. /* Structure definition for unsigned 64 bit integers */
  82. typedef struct {
  83.      DWORD lsw ;   /* Least significant 32 bits */
  84.      DWORD msw ;   /* Most significant 32 bits  */
  85. } UINT64, *UINT64_PTR;
  86. /* Compressed date structure for storing dates in minimal space on tape
  87.      BYTE 0    BYTE 1    BYTE 2    BYTE 3    BYTE 4
  88.     76543210  76543210  76543210  76543210  76543210
  89.     yyyyyyyy  yyyyyymm  mmdddddh  hhhhmmmm  mmssssss  */
  90. typedef struct {
  91.      BYTE     dt_field[5] ;
  92. } MTF_DATE_TIME, * MTF_DATE_TIME_PTR ;
  93. /* Tape Address Structure used for size and offset of variable length
  94.    fields in DBLKs (i.e. the backup set name in an SSET). */
  95. typedef struct {
  96.      WORD elmdata_size ;        /* Size of the data   */
  97.      WORD data_offset ;      /* Offset to the data */
  98. } MTF_TAPE_ADDRESS, *MTF_TAPE_ADDRESS_PTR ;
  99. /* Structure definitions for stream header/descriptor */
  100. typedef struct {
  101.    DWORD   stream_id ;             /* Identifier for a stream */
  102.    WORD    stream_fs_attribute ;   /* File System Attributes */
  103.    WORD    stream_tf_attribute ;   /* Tape Format Attributes */
  104.    UINT64  stream_length ;         /* Length of the data stream */
  105.    WORD    encryption_algorithm ;  /* Data Encryption Algorithm */
  106.    WORD    compression_algorithm ; /* Data Compression Algorithm */
  107.    WORD    checksum ;              /* word-wise XOR checksum of prev fields */
  108. } MTF_STREAM_DESC, * MTF_STREAM_DESC_PTR ;
  109. typedef struct {
  110.    DWORD   stream_id ;             /* Identifier for stream */
  111.    WORD    stream_fs_attribute ;   /* File System Attributes */
  112.    WORD    stream_tf_attribute ;   /* Tape Format Attributes */
  113.    UINT64  stream_length ;         /* Length of the data stream */
  114.    WORD    encryption_algorithm ;  /* Data Encryption Algorithm */
  115.    WORD    compression_algorithm ; /* Data Compression Algorithm */
  116.    UINT64  stream_object ;         /* LBA of DBLK associated with stream */
  117.    UINT64  stream_session_id ;     /* LBA of Start of Session (SSES) DBLK */
  118.    WORD    checksum ;              /* word-wise XOR checksum of prev fields */
  119. } MTF_ISTREAM_DESC, * MTF_ISTREAM_DESC_PTR ;
  120.  
  121. /* Defines for stream Identifers */
  122. #define  MTF_STANDARD_DATA       MTF_MARKER( 'S','T','A','N' )
  123. #define  MTF_NT_SECURITY_DATA    MTF_MARKER( 'N','A','C','L' )
  124. #define  MTF_NTFS_EA_DATA        MTF_MARKER( 'N','T','E','A' )
  125. #define  MTF_HPFS_SECURITY_DATA  MTF_MARKER( 'O','A','C','L' )
  126. #define  MTF_HPFS_EA_DATA        MTF_MARKER( 'O','2','E','A' )
  127. #define  MTF_OTC_SET_MAP_DATA    MTF_MARKER( 'T','S','M','P' )
  128. #define  MTF_OTC_FILE_DD_DATA    MTF_MARKER( 'T','F','D','D' )
  129. #define  MTF_PATH_NAME_STREAM    MTF_MARKER( 'P','N','A','M' )
  130. #define  MTF_FILE_NAME_STREAM    MTF_MARKER( 'F','N','A','M' )
  131. #define  MTF_MAC_RESOURCE        MTF_MARKER( 'M','R','S','C' )
  132. #define  MTF_NOVELL_286          MTF_MARKER( 'N','2','8','6' )
  133. #define  MTF_NOVELL_386          MTF_MARKER( 'N','3','8','6' )
  134. #define  MTF_CRC_STREAM          MTF_MARKER( 'S','C','R','C' )
  135. #define  MTF_NTFS_ALT_DATA       MTF_MARKER( 'A','D','A','T' )
  136. #define  MTF_STRMPAD             MTF_MARKER( 'S','P','A','D' )
  137.  
  138. /* Defines for file system stream attributes */
  139. #define  MTF_STREAM_PLAIN     0     /* No special conditions for stream */
  140. #define  MTF_STREAM_MOD_READ  1     /* Stream altered by read operation */
  141. #define  MTF_STREAM_CONT_SEC  2     /* Stream contains security data    */
  142. #define  MTF_STREAM_NON_PORT  3     /* Data only for same OS saved from */
  143. #define  MTF_CONT_STREAM      0x20  /* This stream is continued from a
  144.                                        previous tape. */
  145. /* Defines for tape format stream attributes */
  146. #define  MTF_STREAM_CONTINUE  0     /* This is a continuation stream */
  147. #define  MTF_STREAM_VARIABLE  1     /* The data size for this stream is variable */
  148. #define  MTF_STREAM_VAR_END   2     /* This is the last part of variable length data */
  149. /* Defines for data alignment within streams */
  150. #define  MTF_STREAM_ALIGN_MASK   0xC000
  151. #define  MTF_STREAM_ALIGN_4      0x0000   /* 4 byte alignment        */
  152. #define  MTF_STREAM_ALIGN_2      0x4000   /* 2 byte alignment        */
  153. #define  MTF_STREAM_ALIGN_1      0x8000   /* 1 byte alignment        */
  154. #define  MTF_STREAM_ALIGN_RSVD   0xC000   /* Reserved for future use */
  155. /* MTF DBLK types */
  156. #define  MTF_TAPE_N     "TAPE"    /* Tape Header             */
  157. #define  MTF_VOLB_N     "VOLB"    /* Volume Descriptor       */
  158. #define  MTF_SSET_N     "SSET"    /* Start of Backup Set     */
  159. #define  MTF_ESET_N     "ESET"    /* End of Backup Set       */
  160. #define  MTF_EOTM_N     "EOTM"    /* End of Tape             */
  161. #define  MTF_DIRB_N     "DIRB"    /* Directory Descriptor    */
  162. #define  MTF_FILE_N     "FILE"    /* File Descriptor         */
  163. #define  MTF_IMAG_N     "IMAG"    /* Image Descriptor        */
  164. #define  MTF_CFIL_N     "CFIL"    /* Corrupt File Descriptor */
  165. #define  MTF_ESPB_N     "ESPB"    /* End of Set Pad Descriptor */
  166. #define  MTF_SSES_N     "SSES"    /* Start Of Session Descriptor */
  167. #define  MTF_ESES_N     "ESES"    /* End of Session Descriptor */
  168. #define  MTF_EOBJ_N     "EOBJ"    /* End of Object Descriptor */
  169. /*   The "block header" is common to all logical tape blocks.  The software need only
  170.      analyze the block header to determine the type of tape block it is and whether
  171.      the software understands this particular tape block or not.  All ordering is
  172.      little endian (INTEL low byte, high byte).    */
  173. typedef struct {
  174.      BYTE             block_type[4] ;         /* Unique identifier, see above      */
  175.      DWORD            block_attribs ;         /* Tape Format attributes            */
  176.      WORD             offset_to_data ;        /* From start of DBLK in bytes       */
  177.      BYTE             machine_os_id    ;      /* Machine/OS id where written       */
  178.      BYTE             machine_os_version ;    /* Machine/OS version where written  */
  179.      UINT64           displayable_size ;      /* Displayable data size             */
  180.      UINT64           logical_block_address ; /* See note at top of file           */
  181.      UINT64           session_id ;            /* Logical Block Address of SSES DBLK */
  182.      DWORD            control_block_id ;      /* Used for error recovery           */
  183.      MTF_TAPE_ADDRESS string_storage ;   /* Location of string storage   */
  184.      MTF_TAPE_ADDRESS os_specific_data ; /* Location of OS specific data */
  185.      BYTE             string_type ;           /* Single byte or UNICODE            */
  186.      BYTE             reserved ;              /* Reserved for future use           */
  187.      WORD             hdr_chksm ;             /* Checksum of the block header.  The
  188.                                        algorithm is: XOR each double word
  189.                                        preceeding this one and store the result
  190.                                        here. (When the checksum is verified the
  191.                                        'block_type' is checked for a non_zero value also. */
  192. } MTF_DB_HDR, * MTF_DB_HDR_PTR ;
  193. /* Block Attribute Bit Definitions */
  194. /* Tape Header DBLK Structure (TAPE) */
  195. typedef struct {
  196.      MTF_DB_HDR       block_header ;              /* Common header         */
  197.      DWORD            tape_id_number ;            /* Unique family ID      */
  198.      DWORD            tape_attributes ;           /* External Attributes   */
  199.      WORD             tape_seq_number ;           /* Sequence in family    */
  200.      WORD             password_encryption_algor ; /* Unique algorithm ID   */
  201.      WORD             ecc_alg ;                   /* Unique algorithm ID   */
  202.      WORD             otc_type ;                  /* On Tape Catalog Type  */
  203.      MTF_TAPE_ADDRESS tape_name ;                 /* Offset/Size of string */
  204.      MTF_TAPE_ADDRESS tape_description ;          /* Offset/Size of string */
  205.      MTF_TAPE_ADDRESS tape_password ;             /* Offset/Size of string */
  206.      MTF_TAPE_ADDRESS software_name ;             /* Offset/Size of string */
  207.      WORD             logical_block_size ;        /* Alignment factor      */
  208.      WORD             software_vendor_id ;        /* Backup Vendor         */
  209.      MTF_DATE_TIME    tape_date ;
  210.      BYTE             tape_format_version_major ; /* Integer value         */
  211. } MTF_TAPE, * MTF_TAPE_PTR ;
  212. #define MTF_ECC_NONE  0
  213. #define MTF_OTC_TYPE  1  /* Type of OTC, this type value is reserved for MTF */
  214. /* Start of Backup Set DBLK Structure (SSET) */
  215. typedef struct {
  216.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  217.      DWORD            sset_attribs ;  /* External Attributes               */
  218.      WORD             pswd_encr_alg ; /* Password encryption algorithm ID  */
  219.      WORD             data_encr_alg ; /* Data encryption algorithm ID      */
  220.      WORD             data_comp_alg ; /* Data compressionalgorithm ID      */
  221.      WORD             set_number ;    /* Number of set in family           */
  222.      MTF_TAPE_ADDRESS set_name ;      /* Offset/Size of set name string    */
  223.      MTF_TAPE_ADDRESS set_descr ;     /* Offset/Size of description string */
  224.      MTF_TAPE_ADDRESS set_password ;  /* Offset/Size of password string    */
  225.      MTF_TAPE_ADDRESS user_name ;     /* Offset/Size of user name string   */
  226.      UINT64           pba ;           /* Physical Block Address            */
  227.      MTF_DATE_TIME    backup_date ;   /* Date/Time backup was started      */
  228.      BYTE             sftwr_ver_mjr ; /* Major software revision (integer) */
  229.      BYTE             sftwr_ver_mnr ; /* Minor software revision (integer) */
  230.      char             time_zone ;     /* Time zone where backed up         */
  231.      BYTE             tape_format_version_minor ; /*                       */
  232.      BYTE             tape_catalog_version ;
  233. }
  234. MTF_SSET, *MTF_SSET_PTR;
  235.  
  236. /* End of Backup Set DBLK Structure (ESET) */
  237. typedef struct {
  238.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  239.      DWORD            eset_attribs ;  /* External Attributes               */
  240.      DWORD            corrupt_count ; /* Number of corrupt file in the set */
  241.      UINT64           sm_pba ;        /* Physical Address of OTC Set Map   */
  242.      UINT64           fdd_pba ;       /* PBA of OTC File/Directory Detail  */
  243.      WORD             fdd_seq_num ;   /* Tape number where F/DD begins     */
  244.      WORD             set_number ;    /* Number of set in family           */
  245.      MTF_DATE_TIME    backup_date ;   /* Date and time of backup           */
  246. } MTF_ESET, * MTF_ESET_PTR ;
  247. /* End of Tape DBLK Structure (EOTM) */
  248. typedef struct {
  249.      MTF_DB_HDR  block_hdr ;          /* Common header                     */
  250.      DWORD       eset_pba ;           /* Physical Address of last on tape  */
  251. } MTF_EOTM, * MTF_EOTM_PTR ;
  252. /* Directory DBLK Structure (DIRB) */
  253. typedef struct {
  254.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  255.      DWORD            dirb_attribs ;  /* External Attributes               */
  256.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  257.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  258.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  259.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  260.      DWORD            dir_id ;        /* For error recovery                */
  261.      MTF_TAPE_ADDRESS dir_name ;      /* Offset/Size of path string        */
  262. } MTF_DIR, * MTF_DIR_PTR ;
  263. /* File DBLK Structure (FILE) */
  264. typedef struct {
  265.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  266.      DWORD            file_attribs ;  /* External Attributes               */
  267.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  268.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  269.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  270.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  271.      DWORD            dir_id ;        /* Of DIRB where file exists         */
  272.      DWORD            file_id ;       /* For error recovery                */
  273.      MTF_TAPE_ADDRESS file_name ;     /* Offset/Size of file name string   */
  274. } MTF_FILE, * MTF_FILE_PTR ;
  275. /* Image DBLK Structure (IMAG) */
  276. typedef struct {
  277.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  278.      DWORD            imag_attribs ;  /* External Attributes               */
  279.      DWORD            part_size ;     /* Size of partition in bytes        */
  280.      DWORD            bytes_in_sect ; /* Number of bytes per sector        */
  281.      DWORD            no_of_sectors ; /* Number of sectors                 */
  282.      DWORD            rel_sect_no ;   /* Relative sector number            */
  283.      DWORD            sect_part_no ;  /* Partition number of sector        */
  284.      WORD             part_sys_ind ;  /* Partition system indicator        */
  285.      WORD             no_of_heads ;   /* Number of heads                   */
  286.      MTF_TAPE_ADDRESS part_name ;     /* Offset/Size of partition name     */
  287. } MTF_IMAG, * MTF_IMAG_PTR ;
  288. /* Corrupt File DBLK Structure (CFIL) */
  289. typedef struct {
  290.      MTF_DB_HDR  block_hdr ;          /* Common header                     */
  291.      DWORD       cfil_attribs ;       /* External Attributes               */
  292.      DWORD       file_id ;            /* Same as associated FILE           */
  293.      DWORD       directory_id ;       /* Same as associated FILE           */
  294.      UINT64      stream_offset ;      /* Offset in data stream where read failed. */
  295.      DWORD       corrupt_stream_id ;  /* Data Stream where corruption occurs */
  296. } MTF_CFIL, * MTF_CFIL_PTR ;
  297.  
  298. /* Volume DBLK Structure (VOLB) */
  299. typedef struct {
  300.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  301.      DWORD            volb_attribs ;  /* External Attributes               */
  302.      MTF_TAPE_ADDRESS device_name ;   /* Offset/Size of device name string */
  303.      MTF_TAPE_ADDRESS volume_name ;   /* Offset/Size of volume name string */
  304.      MTF_TAPE_ADDRESS machine_name ;  /* Offset/Size of machine name       */
  305.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date \(before this\)    */
  306. } MTF_VOL, * MTF_VOL_PTR ;
  307. /* Start Of Session DBLK Structure (SSES) */
  308. typedef struct {
  309.      MTF_DB_HDR block_hdr ;     /* Common header                     */
  310.      UINT64     session_id ;
  311.     /* Logical Block Address of this DBLK */
  312. } MTF_SSES, * MTF_SSES_PTR ;
  313. /* End Of Session DBLK Structure (ESES) */
  314. typedef struct {
  315.      MTF_DB_HDR block_hdr ;     /* Common header                     */
  316.      UINT64     session_id ;    /* Logical Block Address of the SSES DBLK that marks the start of this session  */
  317. } MTF_ESES, * MTF_ESES_PTR ;
  318. /* End Of Object DBLK Structure (EOBJ) */
  319. typedef struct {
  320.      MTF_DB_HDR       block_hdr ;     /* Common header */
  321.      UINT64           session_id ;
  322.     /* Logical Block Address of the SSES DBLK that marks the start of this session */
  323.      UINT64           object_lba ;
  324.     /* Logical Block Address of the DBLK that marks the start of the object just backed up in this session */
  325. } MTF_EOBJ, * MTF_EOBJ_PTR ;
  326. /* End Of Set Pad DBLK Structure (ESPB) */
  327. typedef struct {
  328.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  329. } MTF_ESPB, * MTF_ESPB_PTR ;
  330. /* On Tape Catalog (OTC) Structures */
  331. /* Set Map Header Structure */
  332. typedef struct {
  333.      DWORD   family_id ;    /* Unique tape family ID                     */
  334.      WORD    num_set_recs ; /* Number of Set Map entries to follow       */
  335.      BYTE    pad[2] ;       /* Ensure 4 byte alignment of first SM entry */
  336. } MTF_SM_HDR, * MTF_SM_HDR_PTR ;
  337. /* Set Map Entry Structure */
  338. typedef struct {
  339.      WORD             length ;        /* Length of entry (including
  340.                                          strings) in bytes                 */
  341.      WORD             sset_seq_num ;  /* Tape number where set begins      */
  342.      DWORD            blk_attribs ;   /* Tape Format Attributes            */
  343.      DWORD            set_attribs ;   /* External Attributes               */
  344.      UINT64           sset_pba ;      /* Address of associated SSET        */
  345.      UINT64           fdd_pba ;       /* Address of associated F/DD        */
  346.      WORD             fdd_seq_num ;   /* Tape number where F/DD begins     */
  347.      WORD             set_num ;       /* Backup Set Number                 */
  348.      UINT64           lba ;           /* See note at top of file           */
  349.      DWORD            num_dirs ;      /* Number of directories in set      */
  350.      DWORD            num_files ;     /* Number of files in set            */
  351.      DWORD            corrupt_count ; /* Number of corrupt files in set    */
  352.      UINT64           disp_size ;     /* Displayable size of assoc. SSET   */
  353.      WORD             num_volumes ;   /* No. of OTC vol entries to follow  */
  354.      WORD             pswd_encr_alg ; /* Password Encryption Algorithm ID  */
  355.      MTF_TAPE_ADDRESS set_name ;      /* Offset/Size of set name string    */
  356.      MTF_TAPE_ADDRESS password ;      /* Offset/Size of description string */
  357.      MTF_TAPE_ADDRESS set_descr ;     /* Offset/Size of password string    */
  358.      MTF_TAPE_ADDRESS user_name ;     /* Offset/Size of user name string   */
  359.      MTF_DATE_TIME    backup_date ;   /* Date/Time backup was started      */
  360.      char             time_zone ;     /* Time zone where backed up         */
  361.      BYTE             os_id ;         /* Machine/OS id where written       */
  362.      BYTE             os_ver ;        /* Machine/OS version where written  */
  363.      BYTE             string_type ;   /* Type of strings stored            */
  364.      BYTE             tape_format_version_minor ;
  365.      BYTE             tape_catalog_version;
  366. } MTF_SM_ENTRY, * MTF_SM_ENTRY_PTR ;
  367. /* Common File/Directory Detail Entry Header Structure */
  368. typedef struct {
  369.      DWORD    length ;               /* Length of entry (including
  370.                                          strings) in bytes                 */
  371.      BYTE     type[4] ;              /* As in associated DBLK             */
  372.      WORD     seq_num ;              /* Tape number of associated DBLK    */
  373.      DWORD    blk_attribs ;          /* Tape Format Attributes            */
  374.      DWORD    lba ;                  /* See note at top of file           */
  375.      UINT64   disp_size ;            /* Displayable size of assoc. DBLK   */
  376.      LONG     link ;
  377.      BYTE     os_id ;                /* Machine/OS id where written       */
  378.      BYTE     os_ver ;               /* Machine/OS version where written  */
  379.      BYTE     string_type ;          /* Type of strings stored            */
  380.      BYTE     pad ;                  /* Pad to alignment boundary         */
  381. } MTF_FDD_HDR, * MTF_FDD_HDR_PTR ;
  382. /* File/Directory Detail Volume Entry Structure */
  383. typedef struct {
  384.      DWORD            vol_attribs ;   /* volb_attribs of associated VOLB   */
  385.      MTF_TAPE_ADDRESS device_name ;   /* Offset/Size of device name string */
  386.      MTF_TAPE_ADDRESS vol_name ;      /* Offset/Size of volume name string */
  387.      MTF_TAPE_ADDRESS machine_name ;  /* Offset/Size of machine name       */
  388.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  389. } MTF_FDD_VOL, * MTF_FDD_VOL_PTR ;
  390. /* File/Directory Detail Directory Entry Structure */
  391. typedef struct {
  392.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  393.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  394.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  395.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  396.      DWORD            dir_attribs ;   /* dirb_attribs of associated DIRB   */
  397.      MTF_TAPE_ADDRESS dir_name ;      /* Offset/Size of path string        */
  398. } MTF_FDD_DIR, * MTF_FDD_DIR_PTR ;
  399. /* File/Directory Detail File Entry Structure */
  400. typedef struct {
  401.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  402.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  403.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  404.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  405.      DWORD            file_attribs ;  /* file_attribs of associated FILE   */
  406.      MTF_TAPE_ADDRESS file_name ;     /* Offset/Size of file name string   */
  407. } MTF_FDD_FILE, * MTF_FDD_FILE_PTR ;
  408.  
  409. #endif // SAMS_MICROSOFT_TAPE_FORMAT_HEADER
  410.